/**
 * author: tanyiming
 * date : 2014-08-20
 * description: 可滑动的时间选择插件
 * version: 1.0
 */
(function($){
	//引入jquery cookie 插件
	document.write(" <script language=\"javascript\" src='./widgets/slideDatepicker/jquery.cookie.js' > <\/script>"); 
	var COOKIE_NAME = 'silder_index';

	//默认配置
	var defaults = {    
			date : '', //时间字符串
		    width: 110, //时间块长度
		    height: 34, //时间块高度
		    items: 4, //时间块数量
		    move_index: 1 ,//每次移动的数量
		    domain : '' //可访问cookie的域名
		  };
	var opts; //配置字段
	var activeDate = ""; //选中的时期
	var leftDate = ""; //最左侧滑块时间
	var rightDate = ""; //最右侧滑块时间
	
	//时间块的时间不可超过当日时间
	function checkDateValid(dateStr){
		var date = new Date(dateStr);
		var today = new Date();
		console.log(dateStr+":"+today.getDate());
		return DateFormat(date)<DateFormat(today);
	}
	//格式化日期对象为yyyy-MM-dd的字符
	function DateFormat(date){
		var year = date.getFullYear();
		var month = date.getMonth()+1;
		if(month<10)
			month = "0"+month;
		var day = date.getDate();
		if(day<10)
			day ="0"+day;
		
		return year+"-"+month+"-"+day;
	}
	
	//计算日期偏移量
	function the_offset_date(dateText,offset){
		var tempDate = new Date(dateText);
		tempDate.setDate(tempDate.getDate()+offset);
		return DateFormat(tempDate);
	}
	//检测当前选中时间索引是否符合，因为最右侧的展现时间不可超出当日时间
	function checkIndex(index,date){
		var today = new Date();
		var offset = opts.items + opts.move_index - 1 -index; //滑块距离最右偏移量
		var last_date = new Date(the_offset_date(date,offset));  //最右侧时间
		if(last_date > today){  //如果最右侧时间超出当日时间
			offset = last_date.getDate() - today.getDate();
			index = parseInt(offset)+parseInt(index);  //根据最右侧时间，重新设置选中滑块位置
		}
		return index;
	}
	//日期块移动
	function slider_move(target,distance,item_index){
		var items = target.children();
		items.each(function(index,item){
			var left = item.offsetLeft; //当前时间块左侧偏移量
			if(!$(item).is(":animated")){ //判断元素是否正处于动画状态
				
				//时间块滑动
				$(item).stop(false,true).animate({"left":left+distance},200,function(){ 
					var target_index = 0;
					var dateStr = "";
					
					if(distance > 0 && index >= item_index){ //如果是向右滑动
						left = (item_index-index-1)*opts.width; //最右侧不可见的块移动到最左侧
						dateStr = the_offset_date(target.children().eq(0).val(),-1); //设置时间为最左侧的前一天
						leftDate = dateStr;
					}else if(distance < 0 && index < item_index){ //如果是向左滑动
						left = (opts.items+index)*opts.width; //最左侧的块移动到最右
						target_index = items.length-1; //最右侧块的index
						dateStr = the_offset_date(target.children().eq(target_index).val(),1); //设置时间为最右侧的后一天
						rightDate = dateStr;
					}
					if(dateStr!=""){ //如果有时间，表示要进行时间块位置变化
						$(item).val(dateStr); 
						if(dateStr == activeDate){
							if(!$(item).hasClass("active"))
								$(item).addClass("active");
						}else if($(item).hasClass("active"))
							$(item).removeClass("active");
						$(item).css("left", left+"px");
						var targetItem = target.children().eq(target_index);
						if(left<0) //如果是向左移动，移动到目标位置的前面
							$(item).insertBefore(targetItem);
						else //如果是向右移动，移动到目标位置的后面
							$(item).insertAfter(targetItem);
					}
					
				});
			} 
		});
	}

	$.fn.extend({  
		"slider_datepicker":function(options,callback){
			opts = $.extend(defaults, options); //合并配置数据
			COOKIE_NAME += opts.domain;  //设置当前页面的滑块选中索引值的cookie键值
			var currentDate = new Date(opts.date);   //选中的日期
			if(options.date==DateFormat(new Date())) //如果是当日时间，重置cookie值为-1
				$.cookie(COOKIE_NAME,-1);
			var width = opts.width*opts.items;  //可见区域宽度
			var items = opts.items+2*opts.move_index; //时间块总数
			var left = 0-opts.move_index*opts.width; //最左侧偏移量 
			
			var index = opts.items+opts.move_index-1;
			//如果cookie中有索引值 使用cookie中的值
			if($.cookie(COOKIE_NAME)>0){      
				var index = $.cookie(COOKIE_NAME);
		    }else{
		    	$.cookie(COOKIE_NAME,index);
		    }
			
			//检查当前索引
			index = checkIndex(index,currentDate);
			
			this.attr("style","width:"+(width+80)+"px;height:"+opts.height+"px;display:inline-block;padding:0px 18px;overflow:hidden;");
			
			//滑动区域及元素
			var slider_content = $("<div class='silde_content' style='width:"+width+"px;height:100%;float:left;overflow:hidden;position:relative;'></div>");
			currentDate.setDate(currentDate.getDate()-index);
			for(var i = 0;i<items;i++){
				var active = "";
				if(index == i)
					active = " active";
				var item = $("<input type='button' class='btn btn-default"+active+"' style='width:"+opts.width+"px;position:absolute;top:0px;left:"+left+"px;'/>");
				item.val(DateFormat(currentDate));
				
				if(i == 0)
					leftDate = item.val();
				else if(i == (items-1))
					rightDate = item.val();
				
				slider_content.append(item);
				left = left+opts.width;
				currentDate.setDate(currentDate.getDate()+1);
			}
			//插入该滑块
			slider_content.insertBefore(this.children(".add"));
			
			//点击右侧按钮 向左侧滑动
			this.children(".glyphicon-chevron-right").click(function(){
				var i = opts.items+opts.move_index-1;
				if(checkDateValid(slider_content.children().eq(i).val())){
					var distance = 0 - opts.move_index*opts.width;
					slider_move(slider_content,distance,opts.move_index);
				}
			});
			
			//点击左侧按钮，向右侧滑动
			this.children(".glyphicon-chevron-left").click(function(){
				var distance = opts.move_index*opts.width;
				slider_move(slider_content,distance,opts.move_index+opts.items);
			});
			
			//滑块点击事件，并调用回调函数
			$("#slideDatepicker .silde_content .btn").on("click",function(){
				$.cookie(COOKIE_NAME,$(this).index());
				if(callback)
					callback(this);
			});
		}  
	});  
})(jQuery);